//package com.kx.config.shiro.reamls;
//
//import com.kx.entity.Perms;
//import com.kx.entity.User;
//import com.kx.service.UserService;
//import com.kx.config.shiro.salt.MyByteSource;
//import com.kx.utils.ApplicationContextUtils;
//import org.apache.shiro.authc.AuthenticationException;
//import org.apache.shiro.authc.AuthenticationInfo;
//import org.apache.shiro.authc.AuthenticationToken;
//import org.apache.shiro.authc.SimpleAuthenticationInfo;
//import org.apache.shiro.authz.AuthorizationInfo;
//import org.apache.shiro.authz.SimpleAuthorizationInfo;
//import org.apache.shiro.realm.AuthorizingRealm;
//import org.apache.shiro.subject.PrincipalCollection;
//import org.apache.shiro.util.CollectionUtils;
//import org.springframework.util.ObjectUtils;
//
//import java.util.List;
//
////自定义realm
//public class CustomRealm extends AuthorizingRealm {
//    @Override
//    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
//        //获取身份信息
//        String primaryPrincipal = (String) principalCollection.getPrimaryPrincipal();
//        System.out.println("调用授权认证：" + primaryPrincipal);
//        //根据主身份信息获取角色和权限信息
//        /*if ("zkx".equals(primaryPrincipal)) {
//            SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
////            simpleAuthorizationInfo.addStringPermission("admin");
//            simpleAuthorizationInfo.addRole("user");
//            simpleAuthorizationInfo.addRole("admin");
////            simpleAuthorizationInfo.addStringPermission("user:*:*");
//            simpleAuthorizationInfo.addStringPermission("user:find:*");
//            simpleAuthorizationInfo.addStringPermission("user:update:*");
//            simpleAuthorizationInfo.addStringPermission("user:delete:01");
//            return simpleAuthorizationInfo;
//        }*/
//        UserService userService = (UserService) ApplicationContextUtils.getBean("userService");
//        User user = userService.findRolesByUserName(primaryPrincipal);
//        //授权角色信息
//        if (!CollectionUtils.isEmpty(user.getRoles())) {   //roles集合不为空
//            SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
//            user.getRoles().forEach(role -> {
//                simpleAuthorizationInfo.addRole(role.getName());
//
//                //权限信息
//                List<Perms> perms = userService.findPermsByRoleId(role.getId());
//                if (!CollectionUtils.isEmpty(perms)) {
//                    perms.forEach(perms1 -> {
//                        simpleAuthorizationInfo.addStringPermission(perms1.getName());
//                    });
//                }
//            });
//            return simpleAuthorizationInfo;
//        }
//
//        return null;
//    }
//
//    @Override
//    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
//        System.out.println("==============");
//
//        //根据身份对象
//        String principal = (String) authenticationToken.getPrincipal();
//        //在工厂中获取service对象
//        UserService userService = (UserService) ApplicationContextUtils.getBean("userService");
////        System.out.println(userServiceImpl);
//
////        if ("kx".equals(principal)) {
////            return new SimpleAuthenticationInfo(principal, "123", this.getName());
////        }
//        User user = userService.findByUserName(principal);
//        if (!ObjectUtils.isEmpty(user)) {    //等价于if(user!=null)
////            return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), ByteSource.Util.bytes(user.getSalt()), this.getName());
//            return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), new MyByteSource(user.getSalt()), this.getName());
//        }
//        return null;
//    }
//}
